package uniandes.cupi2.photoViewer.interfaz;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import uniandes.cupi2.photoViewer.listas.IListaAlbum;
import uniandes.cupi2.photoViewer.mundo.Album;
import uniandes.cupi2.photoViewer.mundo.PhotoViewer;

import java.awt.Dimension;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class InterfazPhotoViewer extends JFrame {
	
	private DialogoAgregarFoto dialogoAgregarFoto;
	
	private PanelContenedor panelContenedor;
	
	private PhotoViewer photoViewer;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					InterfazPhotoViewer frame = new InterfazPhotoViewer();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public InterfazPhotoViewer() 
	{
		try {
			photoViewer = new PhotoViewer();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		setSize(new Dimension(700, 600));
		setMinimumSize(new Dimension(900, 600));
		setMaximumSize(new Dimension(700, 550));
		setPreferredSize(new Dimension(900, 600));
		setTitle("Web Photo Viewer");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		JPanel contentPane = new JPanel();
		contentPane.setMinimumSize(new Dimension(700, 500));
		contentPane.setPreferredSize(new Dimension(700, 500));
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		PanelEncabezado panelEncabezado = new PanelEncabezado();
		panelEncabezado.setPreferredSize(new Dimension(700, 110));
		contentPane.add(panelEncabezado, BorderLayout.NORTH);
		
		panelContenedor = new PanelContenedor(this);
		contentPane.add(panelContenedor, BorderLayout.WEST);
		
		PanelOpciones panelOpciones = new PanelOpciones(this);
		contentPane.add(panelOpciones, BorderLayout.SOUTH);
		
		dialogoAgregarFoto = new DialogoAgregarFoto();
		
	}
	
	public void abrirDialogoBuscarFotoPorEtiqueta()
	{
		String etiqueta = JOptionPane.showInputDialog(this, "Ingrese la etiqueta: ", "Buscar foto por etiqueta", JOptionPane.QUESTION_MESSAGE);
		String foto = photoViewer.buscarFotoPorEtiqueta(etiqueta).getNombre();
		JOptionPane.showMessageDialog(this, foto, "Buscar foto por etiqueta", JOptionPane.INFORMATION_MESSAGE);


				
	}
	
	public void abrirDialogoBuscarAlbumPorEtiqueta()
	{
		String etiqueta = JOptionPane.showInputDialog(this, "Ingrese la etiqueta: ", "Buscar album por etiqueta", JOptionPane.QUESTION_MESSAGE);
		String album = photoViewer.buscarAlbumPorEtiqueta(etiqueta).getNombre();
		JOptionPane.showMessageDialog(this, album, "Buscar album por etiqueta", JOptionPane.INFORMATION_MESSAGE);
	}
	
	public void abrirDialogoBuscarFotoPorFecha() throws ParseException
	{
		Date fecha1 = null;
		String fecha = JOptionPane.showInputDialog(this, "Ingrese la fecha", "Buscar foto por fecha", JOptionPane.QUESTION_MESSAGE);
		SimpleDateFormat fec = new SimpleDateFormat(fecha);
		fecha1 = (Date) fec.parse(fecha);
		String album1 = photoViewer.buscarFotoPorFecha(fecha1).getNombre();
		JOptionPane.showMessageDialog(this, album1, "Buscar foto por etiqueta", JOptionPane.INFORMATION_MESSAGE);

	}
	
	public void abrirDialogoBuscarAlbumPorFecha() throws ParseException
	{
		Date fecha1 = null;
		String fecha = JOptionPane.showInputDialog(this, "Ingrese la fecha", "Buscar album por fecha", JOptionPane.QUESTION_MESSAGE);
		SimpleDateFormat fec = new SimpleDateFormat(fecha);
		fecha1 = (Date) fec.parse(fecha);
		String album1 = photoViewer.buscarAlbumPorFecha(fecha1).getNombre();
		JOptionPane.showMessageDialog(this, album1, "Buscar album por etiqueta", JOptionPane.INFORMATION_MESSAGE);

	}
	
	public void abrirDialogoBuscarAlbumPorNombreDeFoto()
	{
		
		String nombreFoto = JOptionPane.showInputDialog(this, "Ingrese el nombre de la foto: ", "Buscar album por nombre de foto", JOptionPane.QUESTION_MESSAGE);
		Album xf= photoViewer.buscarAlbumPorNombre(nombreFoto);
		if(xf.getNombre().equals(""))
		{
			JOptionPane.showMessageDialog(this, "El album no fue encontrado", "Buscar album por nombre de foto", JOptionPane.ERROR_MESSAGE);
			panelContenedor.actualizarPanelAlbum(photoViewer.getAlbumes());
			panelContenedor.activarBotones();
		}
		else
		{
			JOptionPane.showMessageDialog(this, xf.getNombre(), "Buscar album por nombre de foto", JOptionPane.INFORMATION_MESSAGE);
		}

	}
	
	public void abrirDialogoBuscarAlbumPorEtiquetaDeFoto()
	{
		String etiquetaFoto = JOptionPane.showInputDialog(this, "Ingrese la etiqueta de la foto: ", "Buscar album por etiqueta de la foto", JOptionPane.QUESTION_MESSAGE);

		//photoViewer.(BUSCAR ALBUM POR ETIQUETA DE LA FOTO);

		//TODO photoViewer.(BUSCAR ALBUM POR ETIQUETA DE LA FOTO);

	}
	
	public void ordenarAlbumAscendente()
	{
		photoViewer.ordenarAlbumAscendente();
		panelContenedor.actualizarPanelAlbum(photoViewer.getAlbumes());
	}
	
	public void ordenarAlbumDescendente()
	{
		photoViewer.ordenarAlbumDescendente();
		panelContenedor.actualizarPanelAlbum(photoViewer.getAlbumes());
	}
	
	public void ordenarFotoAscendente()
	{
		photoViewer.ordenarFotoAscendente();
	}
	
	public void ordenarFotoDescendente()
	{
		photoViewer.ordenarFotoDescendente();
	}
	
	public void abrirDialogoAgregarEtiquetaAlbum( String nombreAlbum )
	{
		String etiqueta = JOptionPane.showInputDialog(this, "Ingrese la etiqueta del album: ", "Agregar etiqueta del album", JOptionPane.QUESTION_MESSAGE);
		boolean agrego = photoViewer.agregarEtiquetaAlbum(etiqueta, nombreAlbum);
		if(agrego)
		{
			JOptionPane.showMessageDialog(this, "La etiqueta fue agregada con exito", "Agregar etiqueta del album", JOptionPane.INFORMATION_MESSAGE);
			panelContenedor.actualizarListaEtiquetas( photoViewer.getEtiquetasPorAlbum( nombreAlbum ) );
		}
		else
		{
			JOptionPane.showMessageDialog(this, "La etiqueta no fue agregada con exito", "Agregar etiqueta del album", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void abrirDialogoEliminarEtiquetaAlbum( String nombreAlbum )
	{
		String etiqueta = JOptionPane.showInputDialog(this, "Ingrese la etiqueta del album a eliminar", "Eliminar etiqueta del album", JOptionPane.QUESTION_MESSAGE);
		boolean elimino = photoViewer.eliminarEtiquetaAlbum(etiqueta, nombreAlbum);
		if(elimino)
		{
			JOptionPane.showMessageDialog(this, "La etiqueta fue eliminada con exito", "Eliminar etiqueta del album", JOptionPane.INFORMATION_MESSAGE);
			panelContenedor.actualizarListaEtiquetas( photoViewer.getEtiquetasPorAlbum( nombreAlbum ) );
		}
		else
		{
			JOptionPane.showMessageDialog(this, "La etiqueta no fue eliminada con exito", "Eliminar etiqueta del album", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void abrirDialogoAgregarFoto()
	{
		dialogoAgregarFoto.setVisible(true);
		dialogoAgregarFoto.setModal(true);
	}
	
	public void abrirDialogoEliminarFoto()
	{
		
	}

	public void abrirDialogoVerFotos()
	{
		
	}
	
	public void abrirDialogoAgregarAlbum()
	{
		String album = JOptionPane.showInputDialog(this, "Ingrese el nombre del album: ", "Crear album", JOptionPane.QUESTION_MESSAGE);
		boolean respuesta = photoViewer.agregarAlbum(album);
		if( respuesta )
		{
			JOptionPane.showMessageDialog(this, "El album fue agregado con exito", "Crear album", JOptionPane.INFORMATION_MESSAGE);
			panelContenedor.actualizarPanelAlbum(photoViewer.getAlbumes());
			panelContenedor.activarBotones();
		}
		else
		{
			JOptionPane.showMessageDialog(this, "El album no fue agregado con exito", "Crear album", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void abrirDialogoEliminarAlbum()
	{
		String album = JOptionPane.showInputDialog(this, "Ingrese el nombre del album a eliminar: ", "Eliminar album", JOptionPane.QUESTION_MESSAGE);
		boolean respuesta = photoViewer.eliminarAlbum(album);
		if( respuesta )
		{
			JOptionPane.showMessageDialog(this, "El album fue eliminado con exito", "Eliminar album", JOptionPane.INFORMATION_MESSAGE);
			panelContenedor.actualizarPanelAlbum(photoViewer.getAlbumes());
		}
		else
		{
			JOptionPane.showMessageDialog(this, "El album no fue eliminado con exito", "Eliminar album", JOptionPane.ERROR_MESSAGE);
		}
	}

	public void mostrarInformacion( String album )
	{
		Album buscado = photoViewer.buscarAlbumPorNombre(album);
		panelContenedor.actualizaPanelFotos(buscado.getNombre(), buscado.getFecha().toString(), buscado.getEtiquetas( ).toArray());
	}
}
